Represents a typed query against a DICOMDIR file.
public static Queryable<T> DirectoryRecord<T>(
this DicomDataSet dataset
)
<ExtensionAttribute()>
Public Shared Function DirectoryRecord(Of T)( _
ByVal dataset As DicomDataSet _
) As Queryable(Of T)
[ExtensionAttribute()]
public:
static Queryable<T^>^ DirectoryRecordgeneric<typename T>
(
DicomDataSet^ dataset
)
dataset
The dataset that holds information on a DICOM basic directory.
T
The entity type of the query.
A object that provides LINQ based access to a DICOM basic directory.
This extension method represents a query that returns a collection of zero or more objects of a specific type. A valid DICOMDIR must be present in the dataset parameter before a query can be executed. A DICOMDIR query will be executed in the following scenarios:
The following operations are provided by the DICOMDIR LINQ Provider.
This example will show how to perform several different types of LINQ based queries on a DICOM basic directory.
using Leadtools.Dicom;
using Leadtools.Dicom.Common;
using Leadtools.Dicom.Common.Extensions;
using Leadtools;
using Leadtools.Dicom.Common.Linq.BasicDirectory;
using Leadtools.Dicom.Common.DataTypes;
[DicomKey(DicomDirKeyType.Patient)]
public class PatientEntity
{
[Element(DicomTag.PatientID)]
public string Id
{
get;
set;
}
[Element(DicomTag.PatientName)]
public string Name
{
get;
set;
}
}
[DicomKey(DicomDirKeyType.Study)]
public class StudyEntity
{
[Element(DicomTag.PatientID)]
[DicomKey(DicomDirKeyType.Patient)]
public string PatientId
{
get;
set;
}
[Element(DicomTag.StudyDate)]
public DateTime? Date
{
get;
set;
}
[Element(DicomTag.StudyTime)]
public DateTime? Time
{
get;
set;
}
[Element(DicomTag.StudyDescription)]
public string Description
{
get;
set;
}
[Element(DicomTag.StudyInstanceUID)]
public string InstanceUID
{
get;
set;
}
[Element(DicomTag.StudyID)]
public string Id
{
get;
set;
}
[Element(DicomTag.AccessionNumber)]
public string AccessionNumber
{
get;
set;
}
}
public void TestDicomLinq()
{
DicomEngine.Startup();
using (DicomDataSet ds = new DicomDataSet())
{
ds.Load(_DicomDirFile, DicomDataSetLoadFlags.None);
FindPatients(ds);
FindStudies(ds);
FindPatientStudy(ds);
}
DicomEngine.Shutdown();
}
private void FindPatients(DicomDataSet ds)
{
var patients = from patient in ds.DirectoryRecord<PatientEntity>()
select new { Name = patient.Name, Id = patient.Id };
foreach (var patient in patients)
{
Console.WriteLine("Id: " + patient.Id);
Console.WriteLine("Name: " + patient.Name);
}
}
private void FindStudies(DicomDataSet ds)
{
var studies = from study in ds.DirectoryRecord<StudyEntity>()
select study;
foreach (var study in studies)
{
Console.WriteLine("Patient Id: " + study.PatientId);
Console.WriteLine("Accession #: " + study.AccessionNumber);
Console.WriteLine("Study Id: " + study.Id);
}
}
private void FindPatientStudy(DicomDataSet ds)
{
var query = from patient in ds.DirectoryRecord<PatientEntity>()
select new
{
patient,
Studies = from study in ds.DirectoryRecord<StudyEntity>()
where study.PatientId == patient.Id
select study
};
foreach (var item in query)
{
Console.WriteLine("Patient: " + item.patient.Id);
foreach (StudyEntity study in item.Studies)
{
Console.WriteLine(" Instance UID: " + study.InstanceUID);
}
}
}
Imports Leadtools.Dicom
Imports Leadtools.Dicom.Common
Imports Leadtools.Dicom.Common.Extensions
Imports Leadtools.Dicom.Common.Linq
Imports Leadtools.Dicom.Common.Linq.BasicDirectory
Imports Leadtools
Imports Leadtools.Dicom.Common.DataTypes
<DicomKey(DicomDirKeyType.Patient)>
Public Class PatientEntity
<Element(DicomTag.PatientID)>
Public Property Id() As String
Get
Return m_Id
End Get
Set(ByVal value As String)
m_Id = value
End Set
End Property
Private m_Id As String
<Element(DicomTag.PatientName)>
Public Property Name() As String
Get
Return m_Name
End Get
Set(ByVal value As String)
m_Name = value
End Set
End Property
Private m_Name As String
End Class
<DicomKey(DicomDirKeyType.Study)>
Public Class StudyEntity
<Element(DicomTag.PatientID)>
<DicomKey(DicomDirKeyType.Patient)>
Public Property PatientId() As String
Get
Return m_PatientId
End Get
Set(ByVal value As String)
m_PatientId = value
End Set
End Property
Private m_PatientId As String
<Element(DicomTag.StudyDate)>
Public Property [Date]() As System.Nullable(Of DateTime)
Get
Return m_Date
End Get
Set(ByVal value As System.Nullable(Of DateTime))
m_Date = value
End Set
End Property
Private m_Date As System.Nullable(Of DateTime)
<Element(DicomTag.StudyTime)>
Public Property Time() As System.Nullable(Of DateTime)
Get
Return m_Time
End Get
Set(ByVal value As System.Nullable(Of DateTime))
m_Time = value
End Set
End Property
Private m_Time As System.Nullable(Of DateTime)
<Element(DicomTag.StudyDescription)>
Public Property Description() As String
Get
Return m_Description
End Get
Set(ByVal value As String)
m_Description = value
End Set
End Property
Private m_Description As String
<Element(DicomTag.StudyInstanceUID)>
Public Property InstanceUID() As String
Get
Return m_InstanceUID
End Get
Set(ByVal value As String)
m_InstanceUID = value
End Set
End Property
Private m_InstanceUID As String
<Element(DicomTag.StudyID)>
Public Property Id() As String
Get
Return m_Id
End Get
Set(ByVal value As String)
m_Id = value
End Set
End Property
Private m_Id As String
<Element(DicomTag.AccessionNumber)>
Public Property AccessionNumber() As String
Get
Return m_AccessionNumber
End Get
Set(ByVal value As String)
m_AccessionNumber = value
End Set
End Property
Private m_AccessionNumber As String
End Class
Public Sub TestDicomLinq()
DicomEngine.Startup()
Using ds As New DicomDataSet()
ds.Load(_DicomDirFile, DicomDataSetLoadFlags.None)
FindPatients(ds)
FindStudies(ds)
FindPatientStudy(ds)
End Using
DicomEngine.Shutdown()
End Sub
Private Sub FindPatients(ByVal ds As DicomDataSet)
Dim patients = From patient In ds.DirectoryRecord(Of PatientEntity)()
Select Name = patient.Name, Id = patient.Id
For Each patient In patients
Console.WriteLine("Id: " & Convert.ToString(patient.Id))
Console.WriteLine("Name: " & Convert.ToString(patient.Name))
Next
End Sub
Private Sub FindStudies(ByVal ds As DicomDataSet)
Dim studies = From study In ds.DirectoryRecord(Of StudyEntity)()
Select study
For Each study In studies
Console.WriteLine("Patient Id: " & Convert.ToString(study.PatientId))
Console.WriteLine("Accession #: " & Convert.ToString(study.AccessionNumber))
Console.WriteLine("Study Id: " & Convert.ToString(study.Id))
Next
End Sub
Private Sub FindPatientStudy(ByVal ds As DicomDataSet)
Dim query = From patient In ds.DirectoryRecord(Of PatientEntity)()
Select
patient,
Studies = From study In ds.DirectoryRecord(Of StudyEntity)() Where study.PatientId = patient.Id
Select study
For Each item In query
Console.WriteLine("Patient: " & Convert.ToString(item.patient.Id))
For Each study As StudyEntity In item.Studies
Console.WriteLine(" Instance UID: " + study.InstanceUID)
Next
Next
End Sub
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
Your email has been sent to support! Someone should be in touch! If your matter is urgent please come back into chat.
Chat Hours:
Monday - Friday, 8:30am to 6pm ET
Thank you for your feedback!
Please fill out the form again to start a new chat.
All agents are currently offline.
Chat Hours:
Monday - Friday
8:30AM - 6PM EST
To contact us please fill out this form and we will contact you via email.